import axios from "axios";
import router from "./../router"
import { Loading } from "element-ui"
const ConfigBaseUrl = "/api" // 打包时，先问下服务器的部署情况，如果部署再后端自己的服务器上（不是前后端分离部署），就应该把baseUrl去除掉。 baseUrl + 接口后，是否和原接口的url一致。
const myAxios = axios.create( {
  baseURL: ConfigBaseUrl,   //作用，在请求时，给Url属性前，拼接指定的前缀。 不需要再使用 this.url + "/user/login",
  // 只需要写："/user/login" 自动拼接为 "/api/user/logn"
  timeout: 10000 //请求超时的时间配置。
} );


let loadingInstance;
// 添加请求拦截器， 封装axios的目的，自动添加token, 请求时的Loading效果。
myAxios.interceptors.request.use(
  ( config ) => {  // 没有错误时执行的回调函数
    // console.log( config )
    let token = sessionStorage.getItem( 'token' )
    token && ( config.headers[ 'token' ] = token )

    // 显示加载的Loading....
    loadingInstance = Loading.service(
      { fullscreen: true, text: "小姨正在给你做饭中....." }
    );
    return config;

  },
  ( error ) => {// 有错误时执行的回调函数
    return Promise.reject( error )
  } )

// 添加响应拦截器
myAxios.interceptors.response.use(
  ( response ) => {
    // console.log( response.data )
    response.data.token && ( sessionStorage.token = response.data.token )

    // 隐藏loading....
    loadingInstance.close();
    return response;
  },
  error => {
    let res = error.response;
    // console.log( res )
    switch ( res.status ) {
      case 401: // 401 ,认证失败，token失效
        // ...
        router.push( "/login" )
        break;
      // case 404: break;

    }

    return Promise.reject( error )
  }
)


export default myAxios;